package edu.utn.tacs.gestion.service.interfaces;

import java.util.Collection;
import java.util.Date;

import edu.utn.tacs.gestion.domain.impl.Comentario;
import edu.utn.tacs.gestion.domain.impl.Evento;
import edu.utn.tacs.gestion.domain.impl.Usuario;
import edu.utn.tacs.gestion.domain.impl.UsuarioAdministrador;
import edu.utn.tacs.gestion.exception.BusinessException;

public interface IGestionEventosService {
	
	public Usuario registrarUsuario(Long nroDocumento, String nombre) throws BusinessException;
	
	public boolean existeUsuario(Usuario usuario);

	public Usuario getUsuario(Long nroDocumento) throws BusinessException;

	public UsuarioAdministrador getUsuarioAdministrador(Long nroDocumento) throws BusinessException;
	
	public Evento getEvento(String nombre, String fecha) throws BusinessException;

	public Evento crearEvento(Usuario usuario, String nombreEvento,
			String descripcionEvento, Date fechaEvento, double duracionEvento,
			String ubicacionEvento) throws BusinessException;
	
	public boolean existeEvento(Evento evento);

	public void suscribirAEvento(Usuario usuario, Evento evento)
			throws BusinessException;

	public boolean isUsuarioRegistrado(Evento evento, Usuario usuario);
	
	public void cancelarSuscripcionAEvento(Usuario usuario,
			Evento evento) throws BusinessException;

	public Collection<Evento> consultarSuscripcionesUsuario(Usuario usuario);
	
	public Collection<Usuario> consultarSuscripcionesEvento(Evento evento);
	
	public void registrarAsistencia(Evento evento, Usuario usuario)  throws BusinessException;
	
	public boolean asistioUsuario(Evento evento, Usuario usuario);
	
	public Comentario agregarComentario(Evento evento, Usuario usuario, String descripcion) throws BusinessException;
	
	public UsuarioAdministrador crearUsuarioAdministrador(Long nroDocumento, String nombre) throws BusinessException;
	
	public boolean existeUsuarioAdministrador(UsuarioAdministrador usuarioAdministrador);
}